package ru.javadevelop.homefinans.common;

import android.content.Context;
import android.content.SharedPreferences;
import android.widget.ArrayAdapter;
import ru.javadevelop.homefinans.models.Category;
import ru.javadevelop.homefinans.models.Cost;
import ru.javadevelop.homefinans.svc.ArrayOfCategory;
import ru.javadevelop.homefinans.svc.ArrayOfCost;
import ru.javadevelop.homefinans.svc.HomeFinansService;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.UUID;

/**
 * http://t-menu.ru
 * User: navff
 * Date: 27.07.12
 * Time: 9:15
 */
public class Sync {

    private final static String SETTINGS_KEY = "Global";

    /**
     * Получает список категорий из WEB-сервиса и сохраняет их в локальную БД
     * @return
     */
    public static String GetCategories(Context context)
    {
        HomeFinansService ws = new HomeFinansService();

        SharedPreferences mySharedPreferences = context.getSharedPreferences(SETTINGS_KEY , 0);
        String username = mySharedPreferences.getString("Email", "");
        String baseurl = mySharedPreferences.getString("Url", "");
        if ((username.equals(""))||(baseurl.equals("")))
        {
            return "Маловато настроек";
        }
        ws.setBaseUrl(baseurl);
//        ws.setBaseUrl("http://172.16.37.201:92");
        Integer categoriesSize = 0;
        try {
            ArrayOfCategory svcCategories =  ws.GetCategories(username);
            // Чистим локальные категории
            Category.geleteAllLocal(username);
            // Перебираем только что полученые категории
            categoriesSize = svcCategories.getCategory().size();
            for (int i=0; i<categoriesSize; i++ )
            {
                ru.javadevelop.homefinans.svc.Category  svcCat =  svcCategories.getCategory().get(i);
                Category localCat = new Category(svcCat.getid(), svcCat.getname(), svcCat.getusername());
                localCat.username = svcCat.getusername();
                localCat.save();
            }
        } catch (Exception e) {
            throw new RuntimeException("Ошибка! Категории не получены");
        }
        return "Категории синхронизированы ("+categoriesSize.toString() +")";
    }

    public static String SendCosts(Context context) {
        String result = null;
        HomeFinansService ws = new HomeFinansService();

        SharedPreferences mySharedPreferences = context.getSharedPreferences(SETTINGS_KEY , 0);
        String username = mySharedPreferences.getString("Email", "");
        String baseurl = mySharedPreferences.getString("Url", "");
        if ((username.equals(""))||(baseurl.equals("")))
        {
            return "Маловато настроек";
        }
        ws.setBaseUrl(baseurl);
        ArrayOfCost arrayOfCost = new ArrayOfCost();

        ArrayList<Cost> localCosts = Cost.getAll();
        int localCostsCount = localCosts.size();
        for (int i = 0; i<localCostsCount; i++)
        {
            ru.javadevelop.homefinans.svc.Cost svcCost = new ru.javadevelop.homefinans.svc.Cost();
            // Заполняем поля
            svcCost.setCategoryId(localCosts.get(i).categoryId);
            svcCost.setId(localCosts.get(i).id);
            svcCost.setSum(localCosts.get(i).sum);
            svcCost.setLongDate(localCosts.get(i).date.getTime());
            svcCost.setUsername(localCosts.get(i).username);
            // пихаем в исходящий массив
            arrayOfCost.getCost().add(svcCost);
        }
        try {
            result = ws.SendCosts(arrayOfCost);
            return "Затраты отправлены ("+Integer.valueOf(result).toString()+")";
        } catch (Exception e) {
            throw new RuntimeException("Ошибка! Затраты не отправлены.");
        }
    }

    /**
     * Удаляет затраты (Cost) из локальной БД
     * @param context
     */
    public static void ClearLocalCosts(Context context) {
        SharedPreferences mySharedPreferences = context.getSharedPreferences(SETTINGS_KEY , 0);
        String username = mySharedPreferences.getString("Email", "");
        Cost.deleteAll(username);
    }
}
